package com.t.bricks.bussiness.controller.coupon;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

import java.math.BigDecimal;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.t.bricks.bussiness.db.entity.coupon.Coupon;
import com.t.bricks.bussiness.model.coupon.AddInfo;
import com.t.bricks.bussiness.model.coupon.ConditionCoupon;
import com.t.bricks.bussiness.service.coupon.CouponService;
import com.t.bricks.model.MsgEmity;
import com.t.bricks.utils.modules.web.FindByPageParam;

/**
 * 优惠卷控制层
 * 继承BaseController可直接实现通用方法,三个泛型代表:业务类、实体类、查询类
 * 通用业务类CommonService已经包含常用功能,使用自定义CouponService(需实现)可覆盖通用方法或扩展业务功能
 * 通用查询类可以直接使用Map,否则使用自定义ConditionCoupon(需实现)
 * @author HuangXinBian
 * @DateTime 2022年06月22日 15:25:25
 */
@RestController
@Api(value="优惠卷", tags={"优惠卷操作接口"})
@RequestMapping("/coupon/")
public class CouponController {
	
	@Autowired
	private CouponService couponService;

	/**
	 * 删除数据
	 * @param uId 记录编号
	 * @param iVersion
	 * @return MsgEmity
	 */
	@ApiOperation(value="删除优惠卷")
	@RequestMapping(method={RequestMethod.POST}, value="/del")
	public MsgEmity del(String uId, Integer iVersion) {
		return couponService.del(uId, iVersion);
	}

	/**
	 * 批量添加
	 * @param addInfo 新增优惠卷实体对象
	 * @return MsgEmity
	 */
	@ApiOperation(value="批量添加优惠卷")
	@RequestMapping(method={RequestMethod.POST}, value="/adds")
	public MsgEmity adds(@RequestBody AddInfo addInfo) {
		return couponService.adds(addInfo);
	}

	/**
	 * 根据记录编号查询符合分页数据的某条记录
	 * @param id 记录编号
	 * @return MsgEmity
	 */
	@ApiOperation(value="根据记录编号查询符合分页数据的某条记录", response=Coupon.class)
	@RequestMapping(method={RequestMethod.POST}, value="/find/page/row")
	public MsgEmity findByPageRow(String id) {
		return couponService.findByPageRow(id);
	}

	/**
	 * 查询分页数据
	 * @param findByPageParam 分页查询条件组合类
	 * 结构参考: {"page": 分页请求信息对象, "orders": 排序信息对象集合, "sLikeStr": 全文检索, "condition": 查询条件对象}
	 * @return MsgEmity 返回查询结果
	 */
	@ApiOperation(value="查询分页数据", response=Coupon.class)
	@RequestMapping(method={RequestMethod.POST}, value="/find/page")
	public MsgEmity findByPage(@RequestBody FindByPageParam<ConditionCoupon> findByPageParam) {
		return couponService.findByPage(
				findByPageParam.getPage(),
				findByPageParam.getOrders(),
				findByPageParam.getsLikeStr(),
				findByPageParam.getCondition());
	}

	//---------------------------- 自动生成代码结束 ----------------------------//

	/**
	 * 批量删除数据
	 * 注:只能删除未被领取的数据
	 * @param sType 分类
	 * @param sWaresType 限制商品分类
	 * @return int
	 */
	@ApiOperation(value="批量删除数据", notes="只能删除未被领取的数据")
	@RequestMapping(method={RequestMethod.POST}, value="/dels")
	public MsgEmity dels(String sType, String sWaresType) {
		return couponService.dels(sType, sWaresType);
	}

	/**
	 * 占用(一张)
	 * @param sType 分类
	 * @param mPrice 金额
	 * @param sCustomerId 客户编号
	 * @return
	 */
	@ApiOperation(value="占用(一张)", notes="当前用户占用一张优惠卷")
	@RequestMapping(method={RequestMethod.POST}, value="/employ/one")
	public MsgEmity employ(String sType, BigDecimal mPrice) {
		return couponService.employ(sType, mPrice);
	}

	/**
	 * 按编号占用
	 * @param uId 记录编号
	 * @param sCustomerId 客户编号
	 * @param iVersion 当前版本号
	 * @return
	 */
	@ApiOperation(value="按编号占用", notes="当前用户占用指定编号优惠卷")
	@RequestMapping(method={RequestMethod.POST}, value="/employ/id")
	public MsgEmity employById(String uId, Integer iVersion) {
		return couponService.employById(uId, iVersion);
	}
	
	/**
	 * 将过期数据更新状态
	 * @return
	 */
	@ApiOperation(value="将过期数据更新状态", notes="将过期优惠卷标记过期")
	@RequestMapping(method={RequestMethod.POST}, value="/expire")
	public MsgEmity expire() {
		return couponService.expire();
	}
	
	/**
	 * 查询当前顾客所持优惠卷
	 * @param sType
	 * @param mPrice
	 * @param iState
	 * @return MsgEmity List<Coupon>
	 */
	@ApiOperation(value="查询当前顾客所持优惠卷", response=Coupon.class, notes="仅当前用户")
	@RequestMapping(method={RequestMethod.POST}, value="/find/customer")
	public MsgEmity findByCustomer(String sType, BigDecimal mPrice, Integer iState) {
		return couponService.findByCustomer(sType, mPrice, iState);
	}
	
}
